home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / ASM-ARM / ARCH-RPC / MM-INIT.H < prev    next >
Text File  |  1999-09-17  |  1KB  |  48 lines

  1. /*
  2.  * linux/include/asm-arm/arch-rpc/mmap.h
  3.  *
  4.  * Copyright (C) 1996 Russell King
  5.  */
  6.  
  7. #define HAVE_MAP_VID_MEM
  8.  
  9. unsigned long map_screen_mem(unsigned long log_start, unsigned long kmem, int update)
  10. {
  11.     static int updated = 0;
  12.     unsigned long address;
  13.     pgd_t *pgd;
  14.  
  15.     if (updated)
  16.         return 0;
  17.     updated = update;
  18.  
  19.     address = SCREEN_START | PMD_TYPE_SECT | PMD_DOMAIN(DOMAIN_KERNEL) | PMD_SECT_AP_WRITE;
  20.     pgd = swapper_pg_dir + (SCREEN2_BASE >> PGDIR_SHIFT);
  21.     pgd_val(pgd[0]) = address;
  22.     pgd_val(pgd[1]) = address + (1 << PGDIR_SHIFT);
  23.  
  24.     if (update) {
  25.         unsigned long pgtable = PAGE_ALIGN(kmem), *p;
  26.         int i;
  27.  
  28.         memzero ((void *)pgtable, 4096);
  29.         
  30.         pgd_val(pgd[-2]) = __virt_to_phys(pgtable) | PMD_TYPE_TABLE | PMD_DOMAIN(DOMAIN_KERNEL);
  31.         pgd_val(pgd[-1]) = __virt_to_phys(pgtable + PTRS_PER_PTE*4) | PMD_TYPE_TABLE | PMD_DOMAIN(DOMAIN_KERNEL);
  32.         p = (unsigned long *)pgtable;
  33.  
  34.         i = PTRS_PER_PTE * 2 - ((SCREEN1_END - log_start) >> PAGE_SHIFT);
  35.         address = SCREEN_START | PTE_TYPE_SMALL | PTE_AP_WRITE;
  36.  
  37.         while (i < PTRS_PER_PTE * 2) {
  38.             p[i++] = address;
  39.             address += PAGE_SIZE;
  40.         }
  41.  
  42.         flush_page_to_ram(pgtable);
  43.  
  44.         kmem = pgtable + PAGE_SIZE;
  45.     }
  46.     return kmem;
  47. }
  48.